// promise 一般用来做异步请求 什么是异步请求? 异步请求是当服务器还没有响应的时候，依然可以进行下一步操作
// 回调函数：该函数作为一个参数传递给另外一个函数 
//回调太多层的话，一个异步操作执行完，才能执行另一个操作的时候，会出现回调地狱的问题，promise用来解决回调地狱的问题，可以非常让代码变优雅
/*  回调地狱
setTimeout(function () {
    console.log('qiangu1');
    setTimeout(function () {
        console.log('qiangu2');
        setTimeout(function () {
            console.log('qiangu3');
        }, 3000);
    }, 2000);
}, 1000);
*/



// promise需要传入一个函数，用来处理异步的任务，这个函数有两个参数，这两个参数又是两个函数
new Promise((reslove,reject)=>{
    // 用setTimeout来模拟网络请求
    setTimeout(() => {
        // resolve() 代表成功 成功之后会执行then函数(promise对象来进行调用)
        reslove();
    }, 2000)
    }).then(()=>{
        console.log('请求服务器1成功');

        return new Promise((reslove,reject)=>{
            // 模拟第二次网络请求
            setTimeout(() => {
                reslove()
            }, 2000);
        }).then(()=>{
            console.log('请求服务器2成功');
            return new Promise((reslove,reject)=>{
                setTimeout(() => {
                    // 这个参数会传到then 里的 message里面
                    reslove('这个是服务器发来的数据')
                }, 1000);
            }).then(message=>{
                console.log('请求服务器3成功'+'服务器请求的数据是'+message)
                return new Promise((reslove,reject)=>{
                    setTimeout(() => {
                        // reject 之后，会跳转到catch方法 同样会传递参数
                        reject('错误信息是abc')
                    }, 1000);
                }).then(()=>{
                    console.log('请求服务器4成功');
                }).catch(errormessage=>{
                    console.log('请求服务器4失败'+'错误信息是'+errormessage);
                })
            })
        })
    })
    
    // promise 另外一种写法
    new Promise((reslove,reject)=>{
        setTimeout(() => {
            reslove('success')
            // reject('fail')
        }, 1000);
        // then函数里面传入两个函数，第一个函数代表成功时候的处理逻辑，第二个函数代表失败时候的处理逻辑
    }).then(data=>{
        console.log(data)
    },err=>{
        console.log(err)
    })
    
